/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BO;

import DAL.AbstractFactory;
import DAL.DTO.EmployeExterneDTO;
import ERRORS.EmployeInexistantException;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author olivierm
 */
public class EmployeExterne extends Employe {
    
    //*******************************************************************
    //Variables
    //*******************************************************************
    
    private ZoneGeographique _zoneAssigne;
    private Vector<Intervention> _listeInterventions;
    
    //*******************************************************************
    //Constructeurs
    //*******************************************************************  

    /**
     * Constructeur utilisé pour convertir un employeInterneDTO en 
     * employeInterne
     * @param employeDTO
     */
    private EmployeExterne(EmployeExterneDTO employeDTO){

        Role role = new Role(employeDTO.is_gestionClient(), employeDTO.is_gestionIntervention(), employeDTO.is_gestionPlanning(),
                    employeDTO.is_gestionDirection(), employeDTO.is_gestionOnSite(), employeDTO.is_gestionSys());
        ZoneGeographique zg = new ZoneGeographique(employeDTO.get_idZg(), employeDTO.get_libelleZg());
        ZoneGeographique zgAssignee = new ZoneGeographique(employeDTO.get_idZgAssignee(), employeDTO.get_libelleZgAssignee());
        Adresse adresse = new Adresse(employeDTO.get_rue(), employeDTO.get_numero(), employeDTO.get_cp(), employeDTO.get_ville(), zg);
        
        this.setNom(employeDTO.get_nom());
        this.setPrenom(employeDTO.get_prenom());
        this.set_matricule(employeDTO.get_matricule());
        this.set_role(role);
        this.setAdresse(adresse);
        this.set_zoneAssigne(zgAssignee);
        this._listeInterventions = new Vector<Intervention>();
        
    }     
    
     /**
     * Constructeur utilisé pour la seconde phase dans le processus de login d'un
     * employé interne
     * @param matricule
     */
    public EmployeExterne (String matricule){
        try {
            EmployeExterneDTO employeDTO;
            employeDTO = AbstractFactory.getInstance().getEmployeDao().rechercherEmployeExterne(matricule);
            CreerEmployeExterne(employeDTO);
        } catch (EmployeInexistantException ex) {
            Logger.getLogger(EmployeInterne.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    /**
     * Constructeur utilisé pour la création d'un nouvel employé (login)
     * @author olivierm
     * @param nom (référencé par la classe personne)
     * @param prenom (référencé par la classe personne)
     * @param adresse (référencé par la classe personne)
     * @param matricule (référencé par la classe Employe)
     * @param password (référencé par la classe Employe)
     * @param _zoneAssigne (référencé par cette classe)
     * @param role (référencé par la classe Employe)
     */
    public EmployeExterne(String nom, String prenom, Adresse adresse, String matricule, String password, 
                            ZoneGeographique _zoneAssigne, Role role) {
        super(nom, prenom, adresse, matricule, password, role);
        this._zoneAssigne = _zoneAssigne;
        this._listeInterventions = new Vector<Intervention>();
    }    

    private EmployeExterneDTO CreerEmployeExterneDTO(){
        return new
                EmployeExterneDTO(this.getNom(), this.getPrenom(), this.getAdresse().get_rue(), this.getAdresse().get_numero(), this.getAdresse().get_cp(), this.getAdresse().get_ville(),
                                    this.get_role().is_gestionClient(), this.get_role().is_gestionIntervention(), this.get_role().is_gestionPlanning(),
                                    this.get_role().is_gestionDirection(), this.get_role().is_gestionOnSite(), this.get_role().is_gestionSys());
    }
    
    /**
     * Méthode créant un employeInterne sur base des champs d'un employeInterneDTO
     * @param employeDTO
     */
    private void CreerEmployeExterne(EmployeExterneDTO employeDTO){
        Role role = new Role(employeDTO.is_gestionClient(), employeDTO.is_gestionIntervention(), employeDTO.is_gestionPlanning(),
                    employeDTO.is_gestionDirection(), employeDTO.is_gestionOnSite(), employeDTO.is_gestionSys());
        ZoneGeographique zg = new ZoneGeographique(employeDTO.get_idZg(), employeDTO.get_libelleZg());
        ZoneGeographique zgAssignee = new ZoneGeographique(employeDTO.get_idZgAssignee(), employeDTO.get_libelleZgAssignee());        
        Adresse adresse = new Adresse(employeDTO.get_rue(), employeDTO.get_numero(), employeDTO.get_cp(), employeDTO.get_ville(), zg);
        
        this.setNom(employeDTO.get_nom());
        this.setPrenom(employeDTO.get_prenom());
        this.set_matricule(employeDTO.get_matricule());
        this.set_role(role);
        this.setAdresse(adresse);
        this._listeInterventions = new Vector<Intervention>();
    }
    
    //*******************************************************************
    //Getters et Setters
    //*******************************************************************
    
    public List<Intervention> get_listeInterventions() {
        return _listeInterventions;
    }

    public void set_listeInterventions(Vector<Intervention> _listeInterventions) {
        this._listeInterventions = _listeInterventions;
    }

    public ZoneGeographique get_zoneAssigne() {
        return _zoneAssigne;
    }

    public void set_zoneAssigne(ZoneGeographique _zoneAssigne) {
        this._zoneAssigne = _zoneAssigne;
    }
   
    //*******************************************************************
    //Méthodes d'instance
    //******************************************************************* 
    public boolean ajouterIntervention(Intervention intervention){
        return false;//TO DO
    }
    
    public boolean supprimerIntervention(Intervention intervention){
        return false;//TO DO
    }
    
    public Intervention rechercherIntervention(Intervention intervention){
        return null;// TO DO 
    }
    //*******************************************************************
    //Méthodes de classe
    //******************************************************************* 
}
